entry completion: Only grab the device if we have one
authorMatthias Clasen <mclasen@redhat.com>
Fri, 16 Oct 2015 00:16:54 +0000 (20:16 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 16 Oct 2015 00:18:26 +0000 (20:18 -0400)
When the entry completion is popped up from a timeout, we may
not have a device. In that case, don't call gdk_device_grab,
do avoid criticals.

gtk/gtkentrycompletion.c

index cee8f250cb1904bf991850d638d5c42a6dec33aa..9acae9de70a1138d8ba0fd1eddbe313f19725d05 100644 (file)
@@ -1654,15 +1654,18 @@ gtk_entry_completion_popup (GtkEntryCompletion *completion)
 
   gtk_widget_show (completion->priv->popup_window);
 
-  gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
-  gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
-                   GDK_OWNERSHIP_WINDOW, TRUE,
-                   GDK_BUTTON_PRESS_MASK |
-                   GDK_BUTTON_RELEASE_MASK |
-                   GDK_POINTER_MOTION_MASK,
-                   NULL, GDK_CURRENT_TIME);
-
-  completion->priv->has_grab = TRUE;
+  if (completion->priv->device)
+    {
+      gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
+      gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
+                       GDK_OWNERSHIP_WINDOW, TRUE,
+                       GDK_BUTTON_PRESS_MASK |
+                       GDK_BUTTON_RELEASE_MASK |
+                       GDK_POINTER_MOTION_MASK,
+                       NULL, GDK_CURRENT_TIME);
+
+      completion->priv->has_grab = TRUE;
+    }
 }
 
 void